freeswitch学习笔记:注册到运营商服务器、作为网关呼出、随机选线等操作 您所在的位置:网站首页 网关注册失败 不能呼叫电话 freeswitch学习笔记:注册到运营商服务器、作为网关呼出、随机选线等操作

freeswitch学习笔记:注册到运营商服务器、作为网关呼出、随机选线等操作

2024-05-30 23:12| 来源: 网络整理| 查看: 265

注册到运营商服务器 我们可以在FreeSWITCH中添加一些网关,以便注册到运营商的SIP服务器上去(应该是一个SBC)。 网关的配置文件如下,为了使用方便,我们让网关名称(name)的后两位与号码的最后两位相同:                 ...... 上面我们仅列出了两个网关账号的配置,其他账号依此类推。

通过单个号码呼出     配置的网关注册成功后,我们就可以通过这个号码(又称为线路)打入打出电话了。我们可以使用 如下命令快速试一下是否能通过某一条线路(如gw30)成功呼出: freeswitch> originate sofia/gateway/gw30/1860535xxxx &echo 测试成功后,就可以设置如下的Dialplan让所有分机都可以通过该网关呼出了:        

使用随机数做号码连选 为了能自动选择一个网关呼出,我们想办法从这10个网关中自动选择一个进行呼出。这种选择的过程就称为 选线,也称为号码连选。当然,号码连选最简单的实现方法是使用一个随机数。见下面的Dialplan: 其中,“expr”是一个API,我们用它的randomize方法产生一个从30到39之间的随机数(如33),在该随机 数前面加上“gw”字符(变为gw33),并把它赋值给一个“gw”通道变量(使用“set”)实现。有了该通道变量 后,在“bridge”的参数中就可以使用“${gw}”引用该变量(在本例中它的值就是gw33),实现动态选择一个随 机的网关。 当然,这种选线算法有一个缺点,就是它不记录实际号码的忙闲状态,如果选到正在通话的号码时,通话还 是会失败。通过下面的方式,我们可以做一个改进的算法: 该方法的思路是,同时选择两个网关(gw1和gw2),如果一个失败,则走另一个(该方法不能从根本上解决 选到正在通话的线路问题,但可以大大减少失败的概率)。

使用mod_distributor进行连选 除随机数外,FreeSWITCH也提供了一个mod_distributor模块模块,专门实现这种连选功能。首先,要安装该 模块,进入FreeSWITCH的源代码目录,执行如下命令: make mod_distributor-install 然后,在conf/autoload_configs/distributor.conf.xml中进行如下设置: 其中,我们配置了一个列表(list),它的名字是“dist1”,总体的权重(total-weight)是“10”。该列 表有好多节点(node)组成,其中每个节点的权重(weight)为“1” [1]。可以看出,这些节点的名字跟我们线 路号码的最后两位相同。 FreeSWITCH加载该模块后,我们就可以先用如下的命令进行一下测试: freeswitch> distributor dist1 32 freeswitch> distributor dist1 35 distributor是该模块提供的一个API命令,它可以用于从预定义的列表中根据权重选择一个节点,并返回该 节点的名称。然后,我们就可以在Dialplan中使用它来帮助我们选线了:       其中,我们使用${distributor(dist1)}让mod_distributor帮我们选择一个节点,并使用它作为网关的名字 向外呼出。当然,与上一节使用的随机数的方案相比,它也聪明不了许多,因为,该模块也没有记录线路是空闲 还是忙的。因此,我们使用了Dialplan Action中的loop属性,如果第一次呼叫失败,它将再试一次(重新执行该 Action)。 当然,与上一节的随机数方案比起来,它还是聪明一点的。例如,虽然我们配置了10个网关,但并不一定所 有时间所有的网关都能正常注册上。通过如下方法,就可以让distributor在生成选择节点时,排除掉处于down状 态(即不可用状态)的网关:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有